// #include<vector>
// #include<limits>
// #include<cstddef>
// #include<iostream>
// using namespace std;

// //make clean
// //Cmake .
// class NonDecArr{
// public:
//     //修改Head
//     //修改Mid
//     //修改End
//     bool checkPossibility(vector<int>& nums) {
//         //1个元素修改 <= 单调增加
//         auto lastV = std::numeric_limits<int>::min();
//         auto findSmall  = 0;
//         //4 2 3
//         vector<int> errorPos;
//         for(auto i = 0; i < nums.size(); i++){
//             auto nv = nums[i];
//             if(nv < lastV) errorPos.push_back(i);
//             lastV = nv;
//             // if(i < nums.size()-1){
//             //     auto nextV = nums[i];
//             //     if(nv >= lastV && nv <= nextV){
//             //         // findSmall++;
//             //         // lastV = std::min(nv, lastV);
//             //         lastV = nv;
//             //     }else {
//             //         // lastV = nv;
//             //         if(nv < lastV && nv > nextV) return false;
//             //         if(nv < lastV) {
//             //             findSmall++;
//             //             lastV = nv;
//             //             continue;
//             //         }
//             //         //nv > nextV
//             //     }
//             // }
            
//         }
//         // std::cout << "ep:" << errorPos.size() << endl;
//         if(errorPos.size() >= 3) return false;
//         if(errorPos.size() == 0) return true;
//         if(errorPos.size() == 1){
//             auto pos = errorPos[0];
//             auto v = nums[pos];
//             auto lastV = nums[pos-1];
//             if(pos == (nums.size()-1)) return true;
//             auto nextV = nums[pos+1];
//             if(v <= nextV) {
//                 if(lastV > nextV) {
//                     auto llP = pos-2;
//                     while(llP >= 0){
//                         auto llV = nums[llP];
//                         if(llV <= v) return true;
//                         else return false;
//                     }
//                     return true;
//                 }
//                 return true;
//             }
//             if(lastV <= nextV) return true;
//             return false;
//         }
//         return false;
//         // return findSmall <= 1;
//         // vector<std::tuple<int, int>> allNum;
//         // for(auto i = 0; i < nums.size(); i++){
//         //     allNum.push_back(std::make_tuple(nums[i], i));
//         // }
//         // std::sort(allNum.begin(), allNum.end(), [](std::tuple<int,int> a, std::tuple<int,int> b)->bool{
//         //     if(std::get<0>(a) == std::get<0>(b)) retu
//         // });
//         // return true;
//     }

// };

// // int main(int, char**) {
// //     auto nd = new NonDecArr();
// //     auto vec = new vector<int>{
// //         // 4,2,3,
// //         3,4,2,3,
// //         // 4,2,1
// //         // 3,4,2,3,
// //     };
// //     auto ret = nd->checkPossibility(*vec);
// //     std::cout << std::boolalpha << "ret:" << ret << std::endl;
    
// // }